
public interface IStack<E> {

	/**
	 * Get the number of element in the stack
	 * @return the number of item
	 */
	public int size();
	
	/**
	 * Put the given element in the stack
	 * @param elem Element to place in the stack, must be not null
	 */
	public void push(E elem);
	
	/**
	 * Return without pushing out the first element of the stack
	 * @return The first element of the stack
	 * @throws EmptyStackException If stack is empty
	 */
	public E top() throws EmptyStackException;
	
	/**
	 * Return and push the first element out of the stack
	 * @return The first element of the stack
	 * @throws EmptyStackException If stack is empty
	 */
	public E pop() throws EmptyStackException;
	
	/**
	 * Copy the content of the stack to the dest stack passed in argument
	 * @param dest The destination, must be not null
	 * @return The destination stack with the new nodes, provided by this stack
	 */
	public IStack<Object> copyToStack(IStack<Object> dest);
	
	public String toString();
	
	/**
	 * Verify if the stack contains elements or not
	 * @return false if the stack contains at least one element, otherwise true
	 */
	public boolean isEmpty();
}
